from flask import jsonify
from werkzeug.exceptions import HTTPException
from pymongo.errors import PyMongoError
from jwt.exceptions import PyJWTError

def register_error_handlers(app):
    """注册全局错误处理器"""
    
    @app.errorhandler(400)
    def bad_request(e):
        return jsonify({
            'success': False,
            'message': '错误的请求',
            'error': str(e)
        }), 400
    
    @app.errorhandler(401)
    def unauthorized(e):
        return jsonify({
            'success': False,
            'message': '未授权',
            'error': str(e)
        }), 401
    
    @app.errorhandler(403)
    def forbidden(e):
        return jsonify({
            'success': False,
            'message': '禁止访问',
            'error': str(e)
        }), 403
    
    @app.errorhandler(404)
    def not_found(e):
        return jsonify({
            'success': False,
            'message': '资源不存在',
            'error': str(e)
        }), 404
    
    @app.errorhandler(PyMongoError)
    def handle_mongo_error(e):
        return jsonify({
            'success': False,
            'message': '数据库错误',
            'error': str(e)
        }), 500
    
    @app.errorhandler(PyJWTError)
    def handle_jwt_error(e):
        return jsonify({
            'success': False,
            'message': '认证错误',
            'error': str(e)
        }), 401
    
    @app.errorhandler(HTTPException)
    def handle_http_exception(e):
        return jsonify({
            'success': False,
            'message': e.description,
            'error': str(e)
        }), e.code
    
    @app.errorhandler(Exception)
    def handle_exception(e):
        return jsonify({
            'success': False,
            'message': '服务器内部错误',
            'error': str(e)
        }), 500 